#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <stdlib.h>
using namespace std;

void prinprint(const sigset_t panding)
{
    cout << "pid: " << getpid() << endl;
    for (int set = 31; set > 0; set--)
    {
        if (sigismember(&panding, set))
        {
            cout << 1;
        }
        else
        {
            cout << 0;
        }
    }
    cout << endl;
}

void no_handl(int sig)
{
    cout << "处理完成" << endl;
}

int main()
{
    signal(2, SIG_IGN);
    // signal(2,no_handl);

    // 1 对2号信号进行屏蔽
    // 在栈上开辟空间
    sigset_t block, oblock;
    sigemptyset(&block);
    sigemptyset(&oblock);
    // 1.1 添加2号信号
    // 我们把2号信号的屏蔽只是在用户栈上设置了block的位图结构
    // 并没有设置进入内核中
    sigaddset(&block, 2);
    // 将其设置到内核
    sigprocmask(SIG_SETMASK, &block, &oblock);

    int cut = 0;
    while (1)
    {

        sigset_t panding;

        sigpending(&panding);

        prinprint(panding);
        sleep(1);
        /* code */

        if (cut == 10)
        {
            cout << "解除对2号信号的屏蔽" << endl;
            sigprocmask(SIG_SETMASK, &oblock, &block);
        }
        cut++;
    }

    return 0;
}

